struct Mat4x4_ {
    mx: vec4<f32>,
    my: vec4<f32>,
    mz: vec4<f32>,
    mw: vec4<f32>,
};

struct Mat4x3_ {
    mx: vec4<f32>,
    my: vec4<f32>,
    mz: vec4<f32>,
};

struct Mat4x2_ {
    mx: vec4<f32>,
    my: vec4<f32>,
};

struct ub_SceneParams {
    u_Projection: Mat4x4_,
};

struct ub_MaterialParams {
    u_TexMtx: array<Mat4x2_,1>,
    u_Misc0_: vec4<f32>,
};

struct ub_PacketParams {
    u_PosMtx: array<Mat4x3_,32>,
};

struct VertexOutput {
    @location(0) v_Color: vec4<f32>,
    @location(1) v_TexCoord: vec2<f32>,
    @builtin(position) member: vec4<f32>,
};

@group(0) @binding(0)
var<uniform> global: ub_SceneParams;
@group(0) @binding(1)
var<uniform> global1: ub_MaterialParams;
@group(0) @binding(2)
var<uniform> global2: ub_PacketParams;
var<private> a_Position1: vec3<f32>;
var<private> a_UV1: vec2<f32>;
var<private> a_Color1: vec4<f32>;
var<private> a_Normal1: vec3<f32>;
var<private> a_PosMtxIdx1: f32;
var<private> v_Color: vec4<f32>;
var<private> v_TexCoord: vec2<f32>;
var<private> gl_Position: vec4<f32>;

fn Mat4x3GetCol0_(m: Mat4x3_) -> vec3<f32> {
    var m1: Mat4x3_;

    m1 = m;
    let x_e2: Mat4x3_ = m1;
    let x_e5: Mat4x3_ = m1;
    let x_e8: Mat4x3_ = m1;
    return vec3<f32>(x_e2.mx.x, x_e5.my.x, x_e8.mz.x);
}

fn Mat4x3GetCol1_(m2: Mat4x3_) -> vec3<f32> {
    var m3: Mat4x3_;

    m3 = m2;
    let x_e2: Mat4x3_ = m3;
    let x_e5: Mat4x3_ = m3;
    let x_e8: Mat4x3_ = m3;
    return vec3<f32>(x_e2.mx.y, x_e5.my.y, x_e8.mz.y);
}

fn Mat4x3GetCol2_(m4: Mat4x3_) -> vec3<f32> {
    var m5: Mat4x3_;

    m5 = m4;
    let x_e2: Mat4x3_ = m5;
    let x_e5: Mat4x3_ = m5;
    let x_e8: Mat4x3_ = m5;
    return vec3<f32>(x_e2.mx.z, x_e5.my.z, x_e8.mz.z);
}

fn Mat4x3GetCol3_(m6: Mat4x3_) -> vec3<f32> {
    var m7: Mat4x3_;

    m7 = m6;
    let x_e2: Mat4x3_ = m7;
    let x_e5: Mat4x3_ = m7;
    let x_e8: Mat4x3_ = m7;
    return vec3<f32>(x_e2.mx.w, x_e5.my.w, x_e8.mz.w);
}

fn Mul(m8: Mat4x4_, v: vec4<f32>) -> vec4<f32> {
    var m9: Mat4x4_;
    var v1: vec4<f32>;

    m9 = m8;
    v1 = v;
    let x_e4: Mat4x4_ = m9;
    let x_e6: vec4<f32> = v1;
    let x_e8: Mat4x4_ = m9;
    let x_e10: vec4<f32> = v1;
    let x_e12: Mat4x4_ = m9;
    let x_e14: vec4<f32> = v1;
    let x_e16: Mat4x4_ = m9;
    let x_e18: vec4<f32> = v1;
    return vec4<f32>(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10), dot(x_e12.mz, x_e14), dot(x_e16.mw, x_e18));
}

fn Mul1(m10: Mat4x3_, v2: vec4<f32>) -> vec3<f32> {
    var m11: Mat4x3_;
    var v3: vec4<f32>;

    m11 = m10;
    v3 = v2;
    let x_e4: Mat4x3_ = m11;
    let x_e6: vec4<f32> = v3;
    let x_e8: Mat4x3_ = m11;
    let x_e10: vec4<f32> = v3;
    let x_e12: Mat4x3_ = m11;
    let x_e14: vec4<f32> = v3;
    return vec3<f32>(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10), dot(x_e12.mz, x_e14));
}

fn Mul2(m12: Mat4x2_, v4: vec4<f32>) -> vec2<f32> {
    var m13: Mat4x2_;
    var v5: vec4<f32>;

    m13 = m12;
    v5 = v4;
    let x_e4: Mat4x2_ = m13;
    let x_e6: vec4<f32> = v5;
    let x_e8: Mat4x2_ = m13;
    let x_e10: vec4<f32> = v5;
    return vec2<f32>(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10));
}

fn Mul3(v6: vec3<f32>, m14: Mat4x3_) -> vec4<f32> {
    var v7: vec3<f32>;
    var m15: Mat4x3_;

    v7 = v6;
    m15 = m14;
    let x_e5: Mat4x3_ = m15;
    let x_e6: vec3<f32> = Mat4x3GetCol0_(x_e5);
    let x_e7: vec3<f32> = v7;
    let x_e10: Mat4x3_ = m15;
    let x_e11: vec3<f32> = Mat4x3GetCol1_(x_e10);
    let x_e12: vec3<f32> = v7;
    let x_e15: Mat4x3_ = m15;
    let x_e16: vec3<f32> = Mat4x3GetCol2_(x_e15);
    let x_e17: vec3<f32> = v7;
    let x_e20: Mat4x3_ = m15;
    let x_e21: vec3<f32> = Mat4x3GetCol3_(x_e20);
    let x_e22: vec3<f32> = v7;
    return vec4<f32>(dot(x_e6, x_e7), dot(x_e11, x_e12), dot(x_e16, x_e17), dot(x_e21, x_e22));
}

fn x_Mat4x4_(n: f32) -> Mat4x4_ {
    var n1: f32;
    var o: Mat4x4_;

    n1 = n;
    let x_e4: f32 = n1;
    o.mx = vec4<f32>(x_e4, 0.0, 0.0, 0.0);
    let x_e11: f32 = n1;
    o.my = vec4<f32>(0.0, x_e11, 0.0, 0.0);
    let x_e18: f32 = n1;
    o.mz = vec4<f32>(0.0, 0.0, x_e18, 0.0);
    let x_e25: f32 = n1;
    o.mw = vec4<f32>(0.0, 0.0, 0.0, x_e25);
    let x_e27: Mat4x4_ = o;
    return x_e27;
}

fn x_Mat4x4_1(m16: Mat4x3_) -> Mat4x4_ {
    var m17: Mat4x3_;
    var o1: Mat4x4_;

    m17 = m16;
    let x_e4: Mat4x4_ = x_Mat4x4_(1.0);
    o1 = x_e4;
    let x_e7: Mat4x3_ = m17;
    o1.mx = x_e7.mx;
    let x_e10: Mat4x3_ = m17;
    o1.my = x_e10.my;
    let x_e13: Mat4x3_ = m17;
    o1.mz = x_e13.mz;
    let x_e15: Mat4x4_ = o1;
    return x_e15;
}

fn x_Mat4x4_2(m18: Mat4x2_) -> Mat4x4_ {
    var m19: Mat4x2_;
    var o2: Mat4x4_;

    m19 = m18;
    let x_e4: Mat4x4_ = x_Mat4x4_(1.0);
    o2 = x_e4;
    let x_e7: Mat4x2_ = m19;
    o2.mx = x_e7.mx;
    let x_e10: Mat4x2_ = m19;
    o2.my = x_e10.my;
    let x_e12: Mat4x4_ = o2;
    return x_e12;
}

fn x_Mat4x3_(n2: f32) -> Mat4x3_ {
    var n3: f32;
    var o3: Mat4x3_;

    n3 = n2;
    let x_e4: f32 = n3;
    o3.mx = vec4<f32>(x_e4, 0.0, 0.0, 0.0);
    let x_e11: f32 = n3;
    o3.my = vec4<f32>(0.0, x_e11, 0.0, 0.0);
    let x_e18: f32 = n3;
    o3.mz = vec4<f32>(0.0, 0.0, x_e18, 0.0);
    let x_e21: Mat4x3_ = o3;
    return x_e21;
}

fn x_Mat4x3_1(m20: Mat4x4_) -> Mat4x3_ {
    var m21: Mat4x4_;
    var o4: Mat4x3_;

    m21 = m20;
    let x_e4: Mat4x4_ = m21;
    o4.mx = x_e4.mx;
    let x_e7: Mat4x4_ = m21;
    o4.my = x_e7.my;
    let x_e10: Mat4x4_ = m21;
    o4.mz = x_e10.mz;
    let x_e12: Mat4x3_ = o4;
    return x_e12;
}

fn main1() {
    var t_PosMtx: Mat4x3_;
    var t_TexSpaceCoord: vec2<f32>;

    let x_e15: f32 = a_PosMtxIdx1;
    let x_e18: Mat4x3_ = global2.u_PosMtx[i32(x_e15)];
    t_PosMtx = x_e18;
    let x_e23: Mat4x3_ = t_PosMtx;
    let x_e24: Mat4x4_ = x_Mat4x4_1(x_e23);
    let x_e25: vec3<f32> = a_Position1;
    let x_e29: Mat4x3_ = t_PosMtx;
    let x_e30: Mat4x4_ = x_Mat4x4_1(x_e29);
    let x_e31: vec3<f32> = a_Position1;
    let x_e34: vec4<f32> = Mul(x_e30, vec4<f32>(x_e31, 1.0));
    let x_e35: Mat4x4_ = global.u_Projection;
    let x_e37: Mat4x3_ = t_PosMtx;
    let x_e38: Mat4x4_ = x_Mat4x4_1(x_e37);
    let x_e39: vec3<f32> = a_Position1;
    let x_e43: Mat4x3_ = t_PosMtx;
    let x_e44: Mat4x4_ = x_Mat4x4_1(x_e43);
    let x_e45: vec3<f32> = a_Position1;
    let x_e48: vec4<f32> = Mul(x_e44, vec4<f32>(x_e45, 1.0));
    let x_e49: vec4<f32> = Mul(x_e35, x_e48);
    gl_Position = x_e49;
    let x_e50: vec4<f32> = a_Color1;
    v_Color = x_e50;
    let x_e52: vec4<f32> = global1.u_Misc0_;
    if ((x_e52.x == 2.0)) {
        {
            let x_e59: vec3<f32> = a_Normal1;
            let x_e64: Mat4x2_ = global1.u_TexMtx[0];
            let x_e65: vec3<f32> = a_Normal1;
            let x_e68: vec2<f32> = Mul2(x_e64, vec4<f32>(x_e65, 1.0));
            v_TexCoord = x_e68.xy;
            return;
        }
    } else {
        {
            let x_e73: vec2<f32> = a_UV1;
            let x_e79: Mat4x2_ = global1.u_TexMtx[0];
            let x_e80: vec2<f32> = a_UV1;
            let x_e84: vec2<f32> = Mul2(x_e79, vec4<f32>(x_e80, 1.0, 1.0));
            v_TexCoord = x_e84.xy;
            return;
        }
    }
}

@vertex
fn main(@location(0) a_Position: vec3<f32>, @location(1) a_UV: vec2<f32>, @location(2) a_Color: vec4<f32>, @location(3) a_Normal: vec3<f32>, @location(4) a_PosMtxIdx: f32) -> VertexOutput {
    a_Position1 = a_Position;
    a_UV1 = a_UV;
    a_Color1 = a_Color;
    a_Normal1 = a_Normal;
    a_PosMtxIdx1 = a_PosMtxIdx;
    main1();
    let x_e11: vec4<f32> = v_Color;
    let x_e13: vec2<f32> = v_TexCoord;
    let x_e15: vec4<f32> = gl_Position;
    return VertexOutput(x_e11, x_e13, x_e15);
}
